home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-10-31 | 3.8 KB | 209 lines | [TEXT/PJMM] |
-
- program ParserDriver;
-
- uses
- ParserGlobals, Eval, ParserOps;
-
- label
- 222, 333, 444, 997, 998, 999;
-
-
- var
-
- i, j, k, place, numnodes, mtot: integer;
- windowsize: rect;
- line, modline, result: str255;
- ch: char;
- ty: hdlstringarray0;
- savename: stringsize;
- tytokentype: hdlstringarray0;
- flag: hdlflagtype;
-
- procedure AllocateParserHandles;
-
- begin
- strvar := hdlstringarray0(NewHandle(SizeOf(stringarray0)));
- strvartokentype := hdlstringarray0(NewHandle(SizeOf(stringarray0)));
- val := hdlextendarray(NewHandle(SizeOf(extendarray)));
- tfile := hdltextfilearray(NewHandle(SizeOf(textfilearray)));
- tfilename := hdlstringarray0(NewHandle(SizeOf(stringarray0)));
- tfileopen := hdlbooleanfilearray(NewHandle(SizeOf(booleanfilearray)));
- flag := hdlflagtype(NewHandle(SizeOf(flagtype)));
- end;
-
- procedure DisposeOfParserHandles;
-
- begin
- DisposHandle(handle(strvar));
- DisposHandle(handle(strvartokentype));
- DisposHandle(handle(val));
- DisposHandle(handle(tfile));
- DisposHandle(handle(tfilename));
- DisposHandle(handle(tfileopen));
- DisposHandle(handle(flag));
- end;
-
-
-
- begin
- varfilename := 'variablefile';
-
- decplace := 20;
-
- decplaceplus10 := decplace + 10;
-
- AllocateParserHandles;
-
- for i := 1 to maxnumberfiles do
- tfileopen^^[i] := false;
-
- Hideall;
- setrect(windowsize, 0, 38, 520, 340);
- settextrect(windowsize);
- showtext;
-
- numberfiles := 0;
- readtfile;
- readvariables;
-
- 998:
- error := '';
- numnodes := 0;
-
- write(blank);
- readln(line);
-
-
- for i := 1 to numberfiles do
- begin
- modline := line;
- place := pos(tfilename^^[i], modline);
- if place <> 0 then
- begin
- if tfileopen^^[i] then
- goto 333;
- if not tfileopen^^[i] then
- open(tfile^^[i], tfilename^^[i]);
- 333:
- tfileopen^^[i] := true;
- reset(tfile^^[i]);
- 444:
- if not eof(tfile^^[i]) then
- begin
- readln(tfile^^[i], modline);
- result := eval(modline);
- if (error <> '') then
- goto 998;
- goto 444;
- end;
- {close(tfile^^[i]);}
- numvariables := numvariables + 1;
- strvar^^[numvariables] := tfilename^^[i];
- strvartokentype^^[numvariables] := 'real';
- readstring(result, val^^[numvariables]);
- writeln(result);
- goto 998;
- end;
- end;
-
- if (pos('listfiles', line) <> 0) then
- if numberfiles > 0 then
- begin
- listtfiles;
- goto 998;
- end;
-
- if (pos('create', line) <> 0) then
- begin
- writeln('write in the name of your file');
- write(blank);
- readln(savename);
- createtfile(savename);
- goto 998;
- end;
-
- if (pos('dec', line) <> 0) then
- begin
- setdecimal;
- goto 998;
- end;
-
- if (pos('listfile', line) <> 0) and (pos('listfiles', line) = 0) then
- begin
- write(blank);
- readln(savename);
- listtfile(savename);
- goto 998;
- end;
-
-
- if (pos('cls', line) <> 0) then
- begin
- clearscreen(line);
- goto 998;
- end;
-
- if (pos('clm', line) <> 0) then
- begin
- numvariables := 0;
- goto 998;
- end;
-
- if pos('delete', line) <> 0 then
- begin
-
- 222:
- write(blank);
- readln(savename);
- if (savename = '') then
- goto 998;
- deletevariable(savename);
- goto 222;
- end;
-
- if line = '' then
- goto 998;
-
- if (line = 'stop') then
- goto 999;
-
- if (numvariables > 0) and (pos('listv', line) <> 0) then
- begin
- listvariables;
- goto 998;
- end;
-
-
- result := eval(line);
- writeln(result);
-
- goto 998;
-
- 999:
-
- if numvariables > 0 then
- begin
- writeln('Do you want to save your current variables for the next session? y/n');
- 997:
- writeln(blank);
- readln(ch);
- if (ch = 'n') or (ch = 'N') then
- begin
- rewrite(varfile);
- writeln('');
- end;
- if (ch = 'y') or (ch = 'Y') then
- storevariables;
- if not ((ch = 'y') or (ch = 'Y') or (ch = 'n') or (ch = 'N')) then
- begin
- writeln('Should be a y, Y, n, or N ');
- goto 997;
- end;
- close(varfile);
- end;
-
-
- DisposeOfParserHandles;
-
-
- end.